package com.shujia.day06.homework;

public class H3FindIndex {
    public static void main(String[] args) {
        /*
        4.二分法查找操作：使用二分法查找有序数组中元素。找到返回索引，不存在输出-1。  分析：二分法查找的前提是数组有序。
            假如有一组数为3，12，24，36，55，68，75，88要查给定的值24.可设三个变量
            front，mid，end分别指向数据的上界，中间和下界，mid=（front+end）/2.
            1)开始令front=0（指向3），end=7（指向88），则mid=3（指向36）。因为mid>x， 故应在前半段中查找。
            2)令新的end=mid-1=2，而front=0不变，则新的mid=1。此时x>mid，故确定应  在后半段中查找。
            3)令新的front=mid+1=2，而end=2不变，则新mid=2，此时a[mid]=x，查找成功。
            4)如要查找的数不是数列中的数，例如x=25，当第三次判断时，x>a[mid]，按以上规律，令front=mid+1，即front=3，出现front>end的情况，表示查找不成功。
         */
        int[] arr = {3, 12, 24, 36, 55, 68, 75, 88};
        int findNum = 3;

        // 下标位置定义
        int front = 0;
        int end = arr.length - 1;

        // 在while循环中不断做折半查找逻辑
        // 当要查找的数据不在数组中，那么下界 front 和 上界end 不断逼近，如果中间没有数值，那么停止循环

        boolean flag = true;

        while (front  <= end) {
            int mid = (front + end) / 2;
            if(findNum == arr[mid]){
                System.out.println("找到该元素，对应下标为："+mid);
                flag = false;
                break;

            } else if (findNum > arr[mid]) {
                front = mid + 1 ;
            }else{
                end = mid - 1;
            }
        }

        if(flag){
            System.out.println("查找的元素不存在..");
        }


    }
}
